Valgrind est une suite d'outils de profilage et de débuggage mémoire sous licence GPL, qui permet de détecter des problèmes de gestion mémoire dans des programmes écrits en C / C++. Plus généralement, Valgrind repose sur une architecture générique permettant la supervisation de programmes à l'aide de 3 outils principaux :
La détection d'erreurs fonctionne de cette manière : le programme doit être lancé dans l'environnement de Valgrind. Toutes les entrées / sorties mémoires sont alors analysées et vérifiées minitieusement en interceptant tous les appels à (malloc|new) et (free|delete).
Il suffit d'installer le paquet apt://valgrind.
Dans ce qui suit, on considère un programme C compilé avec GNU / gcc : test. Ouvrez un terminal et suivez les instructions ci-dessous selon le test souhaité.
L'outil `memcheck' est l'outil de détection de fuites mémoires appelé par défaut. Il recherche les zones mémoires qui ne plus pointées et qui n'ont pas été désallouée (comportement par défaut).
valgrind --tool=memcheck --leak-check=yes|no|full|summary --leak-resolution=low|med|high --show-reachable ./test
où le paramètre `leak-check' peut prendre les valeurs suivantes :
où le paramètre `show-reachable' étend la recherche aux zones encore pointées mais non désallouées.
où le paramètre `leak-resolution' indique le niveau de recherche des fuites mémoires.
L'outil `cachegrind' est un simulateur de cache I1/D1/L2. Il est possible de spécifier manuellement la configuration du cache à simuler. Pour chaque cache, on indique sa taille, l'associativité et la taille de la ligne. Les tailles doivent être données en octets.
valgrind --tool=cachegrind --I1=65535,2,64 --D1=65535,2,64 --L2=65535,2,64 ./test
où {valeur} peut prendre les valeurs suivantes :
L'outil `callgrind' permet de d'effectuer un profilage poussé du programme en comptabilisant le nombre d'appels et les coûts associés.
valgrind --tool=callgrind ./test
A titre informatif, voici quelques liens :